Package de.yaams.rgssplayer.core.render.graphic.java2d

Source Code of de.yaams.rgssplayer.core.render.graphic.java2d.Java2DBitmap

package de.yaams.rgssplayer.core.render.graphic.java2d;

import java.awt.AlphaComposite;
import java.awt.Composite;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import java.awt.RenderingHints;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

import de.yaams.core.helper.gui.YEx;
import de.yaams.rgssplayer.core.java.Bitmap;
import de.yaams.rgssplayer.core.java.Rect;
import de.yaams.rgssplayer.core.render.graphic.core.IBitmap;

public class Java2DBitmap extends IBitmap {
  protected BufferedImage data;
  protected Bitmap container;

  public Java2DBitmap(int width, int height, Bitmap container) {
    this.data = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration()
        .createCompatibleImage(width, height, 3);

    this.container = container;
  }

  public Java2DBitmap(File filename, Bitmap container) {
    try {
      this.data = ImageIO.read(filename);
    } catch (Throwable t) {
      YEx.info("Can not load image " + filename, t);
    }
    this.container = container;
  }

  @Override
  public void stretch_blt(Rect dest_rect, Bitmap src_bitmap, Rect src_rect, int opacity) {
    this.data.getGraphics().drawImage(((Java2DBitmap) src_bitmap.getData()).getData(), dest_rect.x, dest_rect.y,
        dest_rect.x + dest_rect.width, dest_rect.y + dest_rect.height, src_rect.x, src_rect.y, src_rect.x + src_rect.width,
        src_rect.y + src_rect.height, null);
  }

  @Override
  public int width() {
    return this.data.getWidth();
  }

  @Override
  public int height() {
    return this.data.getHeight();
  }

  @Override
  public void fill_rect(int x, int y, int width, int height, de.yaams.rgssplayer.core.java.Color color) {
    Graphics2D g = (Graphics2D) this.data.getGraphics();
    g.setBackground(new java.awt.Color(0.0F, 0.0F, 0.0F, 0.0F));
    g.clearRect(x, y, width, height);

    if (color.alpha > 0.0D) {
      Composite c = null;
      if (color.alpha < 255.0D) {
        c = g.getComposite();
        g.setComposite(AlphaComposite.getInstance(3, (float) (color.alpha / 255.0D)));
      }

      this.data.getGraphics().setColor(Transfer.convertYtC(color));
      this.data.getGraphics().fillRect(x, y, width, height);

      if (c != null) {
        g.setComposite(c);
      }
    }
  }

  @Override
  public de.yaams.rgssplayer.core.java.Color get_pixel(int x, int y) {
    int c = this.data.getRGB(x, y);
    int alpha = (c & 0xFF000000) >> 32;
    int red = (c & 0xFF0000) >> 16;
    int green = (c & 0xFF00) >> 8;
    int blue = c & 0xFF;

    return new de.yaams.rgssplayer.core.java.Color(red, green, blue, alpha);
  }

  @Override
  public void draw_text(int x, int y, int width, int height, String str, int align) {
    if (this.container.font.color.alpha <= 0.0D || this.container.font.size < 6) {
      return;
    }

    Graphics2D g = (Graphics2D) this.data.getGraphics();
    g.setColor(Transfer.convertYtC(this.container.font.color));
    g.setFont(Transfer.convert(this.container.font));

    RenderingHints r = g.getRenderingHints();
    g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

    if (this.container.font.shadow) {
      g.setColor(java.awt.Color.BLACK);
      drawText(x + 1, y + 1, width, height, str, align, g, this.container.font.color.alpha / 2.0D);
    }

    drawText(x, y, width, height, str, align, g, this.container.font.color.alpha);

    g.setRenderingHints(r);
  }

  protected void drawText(int x, int y, int width, int height, String str, int align, Graphics2D g, double alpha) {
    Composite c = null;
    if (alpha < 255.0D) {
      c = g.getComposite();
      g.setComposite(AlphaComposite.getInstance(3, (float) (alpha / 255.0D)));
    }

    Rect rect = text_size(str);

    height -= 3;
    width -= 6;

    if (align == 0) {
      g.drawString(str, x, y + height / 2 + rect.height / 2);
    }

    if (align == 1) {
      g.drawString(str, x + width / 2 - rect.width / 2, y + height / 2 + rect.height / 2);
    }

    if (align == 2) {
      g.drawString(str, x + width - rect.width - 1, y + height / 2 + rect.height / 2);
    }

    if (c != null) {
      g.setComposite(c);
    }
  }

  @Override
  public Rect text_size(String str) {
    Graphics2D g = (Graphics2D) this.data.getGraphics();

    g.setFont(Transfer.convert(this.container.font));

    Rectangle2D r = g.getFontMetrics().getStringBounds(str, g);

    return new Rect(0, 0, (int) r.getWidth(), (int) r.getHeight());
  }

  @Override
  public void hue_change(int hue) {}

  @Override
  public void dispose() {
    this.data = null;
  }

  public BufferedImage getData() {
    return this.data;
  }
}

/*
* Location: /Users/abby/Desktop/YAamsRGSSPlayer.jar Qualified Name:
* de.yaams.rgssplayer.core.render.graphic.java2d.Java2DBitmap JD-Core Version:
* 0.6.0
*/
TOP

Related Classes of de.yaams.rgssplayer.core.render.graphic.java2d.Java2DBitmap

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.